import { AxiosResponse } from 'axios'
import fileInstance from './index'
import instance,{instanceImg} from './index'
import {User} from './auth'

/**
 * 定义商品的状态
 */
export enum ItemStatus {
  /**
   * 未发布，草稿状态，仅自己可见
   */
  DRAFT = 'DRAFT',

  /**
   * 已发布，所有人可见，可以购买
   */
  AVAILABLE = 'AVAILABLE',

  /**
   * 求购发布，所有人可见
   */
  REQUEST = 'REQUEST',

  /**
   * 已成交
   */
  DEAL = 'DEAL',

  /**
   * 暂时下架，仅自己可见
   */
  PAUSE = 'PAUSE'
}

/**
 * 定义商品类型，具体字段我就不注释了
 */
export interface Item {
  id: string
  name: string
  description?: string
  status: ItemStatus
  price: number
  originalPrice?: number
  updatedAt: Date
  createdAt: Date
  user: {
    id: string
    profile: {
      id: string
      nickname: string
      avatar: string
      gender: string
    }
  }
  photos: Array<{ id: string; path: string; order: number }>
}
/**
 * 商品图片的信息
 */


/**
 * 评论相关信息
 */
export interface Commit {
  user:User,
  targetId:string,
  targetType:string,
  content:string,
  deletedAt:string,
  reviewType:string,
  id:string,
  createdAt: string,
  updatedAt: string
}
export interface ItemPhotosUrl{
  id:string
  updatedAt: Date
  createdAt: Date
  path: string
  order: number
}
/**
 * 定义创建商品时需要提供的字段。
 * Pick<T, K> 是 TypeScript 提供的帮助类型之一，表示从 T 中挑选出 K 里指定的字段。
 *
 * @see https://www.typescriptlang.org/docs/handbook/utility-types.html
 */
export type NewItemForm = Pick<
  Item,
  'name' | 'description' | 'price' | 'originalPrice' | 'status'
>

export interface Commit {
  user: User
  targetId: string
  targetType: string
  content: string
  deletedAt: string
  reviewType: string
  id: string
  createdAt: string
  updatedAt: string
}

export interface favorite {
  favorite: boolean
}

/**
 * 获取所有商品。
 *
 * @todo 分页功能
 * @returns 所有商品数据
 */
export async function getItems(): Promise<AxiosResponse<Item[]>> {
  return await instance.get('/items')
}

/**
 * 根据 ID 获取商品。
 *
 * @param id 商品 ID
 * @returns 商品数据
 */
export async function getItemById(id: string): Promise<AxiosResponse<Item>> {
  return await instance.get(`/items/${id}`)
}

/**
 * 新建商品。
 *
 * @param data 商品数据
 * @returns 完整的商品数据
 */
export async function postItems(
  data: NewItemForm
): Promise<AxiosResponse<Item>> {
  return await instance.post('/items', data)
}
/**
 * 为商品添加图片
 * @author 陈永康
 * @param file
 * @param id
 * @returns 返回商品图片的信息，需要再次加载，直接访问后端的图片api即可
 */

export async function postItemPhotos(
  file: FormData,
  id: string
): Promise<AxiosResponse<ItemPhotosUrl>> {
  return await fileInstance.post(`/items/${id}/photos`)
}

/**
 * 修改商品。普通用户只能修改自己创建的商品。
 *
 * @param id 商品 ID
 * @param data 修改后的数据
 * @returns 修改后的完整商品数据
 */
export async function patchItemById(
  id: string,
  data: Partial<NewItemForm>
): Promise<AxiosResponse<Item>> {
  return await instance.patch(`/items/${id}`, data)
}

/**
 * 删除商品。普通用户只能删除自己创建的商品。
 * @param id 商品 ID
 * @returns 无
 */
export async function deleteItemById(id: string) {
  return await instance.delete(`/items/${id}`)
}
/**
 * 添加商品图片
 * @param id
 * @returns
 */

export async function postPhotoById(id:string,file:FormData):Promise<AxiosResponse<ItemPhotosUrl[]>> {
  return await instanceImg.post(`/items/${id}/photos`,file)
}
/**
 * 删除单个图片
 * @param id
 * @param pid
 * @returns 该图片信息为对象
 */
export async function deletePhotoById(
  id: string,
  pid: string
): Promise<AxiosResponse<ItemPhotosUrl>> {
  return await instance.delete(`/items/${id}/photos/${pid}`)
}
/**
 * 删除所有图片
 * @param id
 * @returns 所有图片信息为对象数组
 */
export async function deleteAllPhoto(
  id: string
): Promise<AxiosResponse<ItemPhotosUrl[]>> {
  return await instance.delete(`/items/${id}/photos`)
}

/**
 * 添加商品
=======

/**
 * 获取收藏列表
 */
export async function getFavorites(): Promise<AxiosResponse<NewItemForm[]>> {
  return await instance.get('/me/favorites')
}

/**
 * 收藏或者取消商品
 */
export async function changeFavorites(id: string, isfavorite: favorite) {
  return await instance.patch(`/items/${id}/favorite`, isfavorite)
}
/**
 * 查询收藏
 */
export async function checkFavorites(
  id: string
): Promise<AxiosResponse<favorite>> {
  return await instance.get(`/items/${id}/favorite`)
}
/**
 * 获取历史记录列表
 */
export async function getHistory(): Promise<AxiosResponse<NewItemForm[]>> {
  return await instance.get('/me/histories')
}
/**
 * 记录浏览历史
 */
export async function setHistory(id: string) {
  return await instance.patch(`/items/${id}/history`)
}
/**
 *删除历史记录
 */
export async function deleteHistory(id: string) {
  return await instance.delete(`/items/${id}/history`)
}

export async function publishCommit(id:string,content:{}) : Promise<AxiosResponse<Commit>>{
  return await instance.post(`/items/${id}/comments`,content)
}
/**
 * 获取商品评论
*/
export async function getAllCommit(id:string) : Promise<AxiosResponse<Commit[]>>{
  return await instance.get(`/items/${id}/comments`)
}
